﻿/*****************************************************************//**
 *
 * @file   FITKAbaqusAdaptorPart.h
 * @brief  Abaqus Part 适配器 用于读取INP过程中的Part解析。
 * @author fulipeng (flipengqd@yeah.net)
 * @date   2024-03-15
 *
 *********************************************************************/
#ifndef __FITKABAQUSADAPTORSET__H__
#define __FITKABAQUSADAPTORSET__H__

#include "FITKAbaqusAbstractAdaptor.h"
#include "FITK_Kernel/FITKAdaptor/FITKIOAdaptorFactory.h"

 //前置声明
ForwardDeclarNS(Interface, FITKModelSet)
ForwardDeclarNS(AbaqusData, FITKAbaqusPart)
ForwardDeclarNS(AbaqusData, FITKDataCase)

namespace IO
{

    /**
     * @brief Abaqus Set 读写适配器
     * @author fulipeng (fulipengqd@yeah.net)
     * @date 2024-03-15
     */
    class FITKAbaqusAdaptorSet : public FITKAbaqusAbstractAdaptor
    {
    public:
        explicit FITKAbaqusAdaptorSet() = default;
        ~FITKAbaqusAdaptorSet() = default;

        /**
         * @brief 获取适配器数据类型名
         * @return 适配器数据类型名
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-03-21
         */
        QString getAdaptorClass() override;

        /**
         * @brief 设置算例数据对象
         * @param caseData
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-03-25
         */
        void setCaseData(AbaqusData::FITKDataCase* caseData);

        /**
         * @brief 适配器读取
         * @return 状态 true成功， false失败
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-03-21
         */
        bool adaptR() override;

        /**
         * @brief 适配器写出
         * @return 状态 true成功， false失败
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-03-21
         */
        bool adaptW() override;

        /**
         * @brief 写出set
         * @return 状态 true成功， false失败
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-04-23
         */
        bool writeSet(Interface::FITKModelSet* set);


        /**
         * @brief 获取实例名称
         * @return instance 名称 如果没有则返回空
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-03-21
         */
        QString getInstanceName();

        /**
         * @brief 是否是局部坐标系
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-05-27
         */
        bool isTransform();

    private:
        /**
         * @brief 写出连接器集合
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-07-02
         */
        bool writeConnectSet(Interface::FITKModelSet* set);

    private:
        /**
         * @brief 算例数据
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-03-25
         */
        AbaqusData::FITKDataCase* _caseData{};

        /**
         * @brief 集合（Set）数据  NSet\ElSet
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-03-21
         */
        Interface::FITKModelSet* _setData{};

        /**
         * @brief instance名称，如果没有则为空
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-03-21
         */
        QString _instanceName;

        /**
         * @brief 是否是局部坐标系
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-05-27
         */
        bool _isTrans{ false };
    };

    Register2FITKIOAdaptorFactory(INP, Interface::FITKModelSet, FITKAbaqusAdaptorSet)

}

#endif
